package com.hpeu_12.day1223;
/**
 * @title 二维数组
 * @author clover
 *1.什么是二维数组？
 *数组的数组。二维数组的每一个元素都是一个一维数组。
 *
 *2.语法格式
 *（1）数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][每一个一维数组的长度];
 *（2）数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][];
 *（3）数据类型[][] 数组名 = {{元素},{元素1,元素2},{元素3,元素4,元素5}};
 *（4）数据类型[][] 数组名 = new 数据类型[][]{{元素},{元素1,元素2}};
 *
 *3.二维数组的遍历
 *（1）使用嵌套for循环遍历
 *（2）使用嵌套foreach
 *
 *总结：
 *1.二维数组声明并分配空间（掌握 ）
 *2.二维数组的遍历（掌握）
 */
public class ArrayDemo {
	public static void main(String[] args) {
		//第一种方式：声明二维数组并分配空间
		//解释：定义了一个名为arr1的二维数组，二维数组中有2个一维数组，每一个一维数组中有四个元素
		int[][] arr1 = new int[2][4];
		
		//第二种方式：声明二维数组并分配空间
		//定义了一个名为arr2的二维数组，二维数组中有3个一维数组，每一个一维数组都是默认初始值null(数组本身就是引用数据类型，而数组元素可以是任意数据类型（引用数据类型，基本数据类型）)
		int[][] arr2 = new int[3][];
		//三个一维数组：arr2[0]、arr2[1]、arr2[2]
		arr2[1] = new int[] {1,2,3};
		arr2[2] = new int[4];
		arr2[2][0] = 10;
		
		//注意不能写成如下格式
		//int[][] arr3 = new int[][3];
		
		//第三种：声明二维数组并分配空间
		/*解释：定义了一个名为arr3的二维数组，二维数组中有3个一维数组,第一个一维数组中有一个元素
		 * 第二个一维数组中有两个元素,第三个一维数组中有三个元素。
		 */
		int[][] arr3 = {{1},{2,3},{4,5,6}};
		
		//第四种 ：声明二维数组并分配空间
		/*
		 * 定义了一个名为arr4的二维数组，二维数组中有2个一维数组,第一个一维数组中有一个元素
		 * 第二个一维数组中有两个元素,
		 */
		int[][] arr4 = new int[][] {{7},{8,9}};
		
		//获取arr3中第一个一维数组的第一个元素
		System.out.println(arr3[0][0]);
		//获取第三个一维数组的第三个元素
		System.out.println(arr3[2][2]);
		System.out.println("----------------------------------");
		
		//使用嵌套for循环遍历二维数组arr3
		//二维数组的长度:数组名.length 
		/*嵌套for循环语法格式
		 * for(1初始化部分;2循环条件;3迭代){ //外层循环
		 * 		for(4内存初始化;5内层循环条件;7内层迭代){  //内层循环
		 * 			6执行的语句
		 * 		}
		 * }
		 * 
		 */
		//外层循环遍历的二维数组中的每一个一维数组，内层循环遍历的数每一个一维数组的元素
		//int[][] arr3 = {{1},{2,3},{4,5,6}};
		for (int i = 0; i < arr3.length; i++) {//外层循环
			for (int j = 0; j < arr3[i].length; j++) { //内层循环
				System.out.print(arr3[i][j]+"  ");
			}
			System.out.println();
		}
		
		//使用嵌套foreach来遍历二维数组
		/*foreach的语法格式
		 * for(数组的数据类型 变量名:数组名){
		 * 		执行的代码
		 * }
		 */
		System.out.println("----------------------------");
		//外层循环遍历的二维数组中的每一个一维数组，内层循环遍历的数每一个一维数组的元素
		for(int[] arrs:arr3) { //外层循环
			for(int arr:arrs) {//内层循环
				System.out.print(arr+"  ");
			}
			System.out.println();
		}
	}
}
